/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import connection.Conexao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import model.Estado;

/**
 * Define as regras de manipulação de dados para o banco de estados;
 * @author Janio Luiz Antunes
 * @author Marcel Vinicius Kohls
 * @see http://code.google.com/p/sysdesk-java/
 *
 */
public class DAOEstado {
    private final String SQL_LISTA_ESTADOS    = "SELECT uf_codigo, uf_sigla, uf_nome FROM estados ORDER BY uf_nome";
    private final String SQL_BUSCA_POR_CODIGO = "SELECT * FROM estados WHERE uf_codigo = ?";

    /**
     * Retorna um resultSet com o resultado do comando de sql da lista de estados
     * @return
     * @throws Exception
     */
    public ResultSet getListaEstados() throws Exception {
        try {
            return Conexao.getStatement().executeQuery(SQL_LISTA_ESTADOS);
        }catch(SQLException sqle){
            throw new Exception(sqle);
        } catch(Exception e){
            throw new Exception(e);
        } finally{}
    }

    /**
     * retorna uma instancia de estado a partir de uma busca no sql
     * pelo código passado como parametro.
     * @param pCodEstado
     * @return
     * @throws Exception
     */
    public Estado getEstadoPorCodigo(int pCodEstado) throws Exception {
        PreparedStatement sqlQuery = null;
        ResultSet sqlResult = null;
        Estado resultadoEstado = new Estado();

        try {
            sqlQuery  = Conexao.getConnection().prepareStatement(SQL_BUSCA_POR_CODIGO);
            sqlQuery.setInt(1,  pCodEstado );
            System.out.println( sqlQuery.toString() );
            sqlResult = sqlQuery.executeQuery();

            resultadoEstado = getValorDoResultado(sqlResult);

            return resultadoEstado;
        }catch(SQLException sqle){
            throw new Exception(sqle);
        } catch(Exception e){
            throw new Exception(e);
        } finally{}
    }

    /**
     * monta um objeto do tipo estado, baseado em um retorno de pesquisa de sql em estados
     * @param pSqlResult
     * @return
     */
    public Estado getValorDoResultado(ResultSet pSqlResult) throws Exception {
        Estado objetoRetorno = new Estado();

        try {

            // apenas define os campos do objeto se realmente retornou resultado
            if (pSqlResult.next()){
                objetoRetorno.setCodigo(pSqlResult.getInt("uf_codigo"));
                objetoRetorno.setNome(pSqlResult.getString("uf_nome"));
                objetoRetorno.setSigla(pSqlResult.getString("uf_sigla"));
            }

        } catch (Exception e) {
            System.out.println("erro: getValorDoResultado: "+e.getMessage());
        }

        return objetoRetorno;
    }

    
}
